

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;
import java.util.ArrayList;


public class Main {

	IServidorConductor servidorConductor;
	IServidorPasajero servidorPasajero;
	static ServidorConductor sc = null;
	Registry registry;

	public static void main(String args[])
	{
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		int fono = 0;
		System.out.print("Geotransporte colectivo\n" +
				"Ingrese su numero de telefono para iniciar sesion: ");
		try {
			fono = Integer.parseInt(reader.readLine());
			if(fono!=0){
				Usuario u = DBManager.getUsuario(fono);
				System.out.println(u.toString());
				
				if(u.getRol().toString().equals(Usuario.Rol.conductor.toString())){
					System.out.println("Bienvenido conductor!("+u.getIp()+":"+u.getPuerto()+")");
					Main.appConductor(u.getIp(),u.getPuerto(), u);
				}
				else{
					System.out.println("Bienvenido pasajero!("+u.getIp()+":"+u.getPuerto()+")");
					Main.appPasajero(u.getIp(),u.getPuerto(), u);
				}
			}			
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}  
	
	private static void appPasajero(String ip, int puerto, Usuario pasajero){
		try {
			@SuppressWarnings("unused")
			ServidorPasajero sp = new ServidorPasajero(ip, puerto, pasajero);			
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	private static void appConductor(String ip, int puerto, Usuario conductor){
		try {
			sc = new ServidorConductor(ip, puerto, conductor);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			System.out.println("Se produjo un error en la conexion.("+e.getMessage()+")");
		}
		menuConductor(conductor);
	}
	private static void buscarPasajeros(Usuario conductor){
		ArrayList<Usuario> pasajeros = null;
		try {
			pasajeros = sc.buscarPasajerosCercanos(conductor.getLat_ini(),conductor.getLon_ini(),conductor.getLat_fin(),conductor.getLon_fin());
			if(pasajeros.size()==0){
				System.out.println("Lo sentimos no hay pasajeros cerca");
				System.exit(0);
			}else{
				sc.invitarPasajeros(pasajeros);
				//sc.coordinarViaje();
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}

	
	private static void menuConductor(Usuario conductor){
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));		
		int opcion = 0;
		do{
			System.out.println("Seleccione una opcion: \n" +
				" 1 - Buscar pasajeros\n" +
				" 2 - Coordinar viaje\n" +
				" 3 - Cancelar Viaje");
	    	try {
				opcion= Integer.parseInt(reader.readLine());
			} catch (NumberFormatException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
	    	switch(opcion){
	    	case 1:
	    		buscarPasajeros(conductor);
	    		break;
	    	case 2:
	    		sc.coordinarViaje();
	    		break;
	    	case 3:
	    		
				try {
					sc.cancelarViaje();
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
	    		break;
	    	}
		}while(opcion!=-1);
	}
}

